import { defineStore } from "pinia";

interface IStateRes {
    // menus: IMenuItem[];
    menus: Array<IMenuItem>;
}

export const useMenusStore = defineStore("menus", {
    state: (): IStateRes => {
        return {
            menus: [],
        };
    },
    getters: {
        sortedMenus: (state) => {
            let menus = [...state.menus]; // 深拷贝

            // 1.sort 把所有的一级菜单排在数组的前面，二级菜单放在数组的后面
            // 2.进行排序后的数组的循环，判断数组项的parentId是否为0，如果为0，增加一个字段children,用来存放子级
            // 3.判断数组项的parentId是否不等于0，如果不等于0，说明他有父级，就要根据parentId去找父级,找到父级后，把这一项push到父级的children里面
            // 4.对新数组进行过滤，只保留一级菜单，二级菜单不需要了，因为已经push到一级菜单里面了
            // 5.需要对过滤后的数组进行id排序，从小到大的顺序

            menus.sort((a, b) => {
                return a.parentId - b.parentId;
            });
            menus.forEach((item) => {
                // hidden  === 0 说明不隐藏
                if (item.hidden === 0) {
                    if (item.parentId === 0) {
                        item.children = [];
                    }
                    const index = menus.findIndex((el) => {
                        return el.id === item.parentId;
                    });
                    if (index > -1) {
                        menus[index].children?.push(item);
                    }
                }
            });
            menus = menus.filter((item) => {
                return item.parentId === 0;
            });
            menus.sort((a, b) => {
                return a.id - b.id;
            });
            // console.log(menus);

            return menus;
        },
    },
    actions: {
        // updateMenus(menu: IStateRes["menus"]) {
        //   this.menus = menu;
        // },
        updateMenus(menu: IMenuItem[]) {
            this.menus = menu;
        },
    },
});
